package com.zuser.project.config;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

@Component
public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {

        // 1. 放行预检请求（OPTIONS）
//        if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
//            return true;
//        }
//
//        // 2. 放行登录接口（根据实际登录路径调整）
//        if ("/api/auth/login".equals(request.getRequestURI())) {
//            return true;
//        }

        // 3. 获取并验证Token
        String token = request.getHeader("Authorization");
        if (token == null || !token.startsWith("Bearer")) {
           throw new Exception("缺少有效的认证Token");
        }

//        // 4. 提取并验证真实Token（去掉Bearer前缀）
//        String jwtToken = token.substring(7);
//        if (!isValidToken(jwtToken)) {
//            response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Token无效或已过期");
//            return false;
//        }

        return true;
    }

    private boolean isValidToken(String token) {
        // 实现你的Token验证逻辑，例如：
        // - 使用JWT库验证签名
        // - 检查过期时间
        // - 验证Token中的用户信息等
        // 这里只是示例，请替换为真实验证逻辑
        return !token.isEmpty();
    }

    // postHandle和afterCompletion可根据需要实现
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) throws Exception {
        // 请求处理之后调用（Controller方法调用之后）
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
        // 整个请求完成之后调用（视图渲染完毕）
    }
}